xss-labs
这几天感受了一下数字中国和nkctf的题,基本上都还不会做,所以又回来刷靶场了
在DVWA中我们对xss已经有了一个认识,这里就直接开做吧
level-1
直接进入题目
在url 中发现注入点,我们尝试注入最简单的payload
<script>alert('xss')</script>
成功了,我们回头看看代码
$str = $_GET[“name”];
echo “欢迎用户”.$str.”
“;
可以发现通过GET方式赋值的变量name没有经过任何处理便传给$str,然后直接插入到h2中。
level-2
发现个变量test,尝试后没有弹窗,我们f12打开查看器看看
可以发现有两个注入点,我们直接利用第二个,在输入框输入、
"><script>alert('xss')</script>
PS:”>是为了闭合value值和input框
可以发现h2标签中的恶意代码被编码了。其中<>都被编码成了html字符实体
我们看看源代码
$str = $_GET[“keyword”];
echo “没有找到和”.htmlspecialchars($str).”相关的结果.
“.’
可以发现在显示处使用了htmlspccialchars()进行过滤,但是在input value中没有,所以我们可以注入xss语句
level-3
我们尝试使用上一题的payload,查看查看器,发现和第二题一样,但是没有弹窗
来看眼源代码
看到使用了htmlspecialchars方法,可以发现尖括号和双引号被转义为标签了
这时候我们的思路就尽量要绕开使用新标签,那么浏览器还有一些事件可以执行js代码,如onfocus,onblur,但是这两个是属于输入框在光标进入/离开时调用后面的js代码(可以用函数形式或者javascript:~~)
click事件
payload
'onclick='alert(1)
onmouseover事件:
构造事件onmouseover,事件成功执行javascript:伪协议;此时仍需进行闭合
payload:
'onmouseover='javascript:alert(1)
onfocus事件:
onfocus事件是javascript中在对象获得焦点时发生的事件,最简单的实例就是网页上的一个输入框,当使用鼠标点击该输入框时输入框被选中可以输入内容的时候就是该输入框获得焦点的时候,此时输入框就会触发onfocus事件.因此点击当前页面的输入框就可以完成弹框了。
payload:
'onfocus='javascript:alert(1)
经过尝试,javascript要不要都可以,搞的还不是很明白
补充一下htmlspecialchars()的转义规则
- & (和号)成为 &
- “ (双引号)成为 "
- ‘ (单引号)成为 ‘
- < (小于)成为 <
(大于)成为 >
最后看看代码,两处都进行了过滤
echo “
没有找到和”.htmlspecialchars($str).”相关的结果.
“.”
